﻿//////////////////////////////////////////////////////////////////////////////
//
//  Copyright © 1998-2024 Glodon Company Limited.  All rights reserved.
//
//  Use of this software is subject to the terms of the Glodon license
//  agreement provided at the time of installation or download, or which
//  otherwise accompanies this software in either electronic or hard copy form.  
//
//////////////////////////////////////////////////////////////////////////////

// Reviewed
#pragma once

#include "GcmpModelInterface.h"
#include "ElementCreationOptions.h"
#include "IObject.h"

namespace gcmp
{
    class IDocument;
    class IParameterValueStorage;
    class UniIdentity;


    /// \brief Element创建所需的数据结构。
    class GCMP_MODEL_INTERFACE_EXPORT IElementInput : public IObject
    {
    public:
        /// \brief 析构函数
        virtual ~IElementInput() {}

        /// \brief 获取文档指针。
        /// \return 返回文档指针。
        virtual IDocument* GetDocument() const = 0;

        /// \brief 获取Element的关联平面Id
        /// \return Element的关联平面Id
        virtual ElementId GetAssociatedPlaneId() const = 0;

        /// \brief 设置关联平面Id
        /// \param associatedPlaneId 关联平面Id
        /// \return void
        virtual void SetAssociatedPlaneId(ElementId associatedPlaneId) = 0;

        /// \brief 获取Element的创建选项
        /// \return 返回Element的创建选项
        virtual ElementCreationOptions GetCreationOption() const = 0;

        /// \brief 设置Element的创建选项
        /// \param value Element的创建选项值
        virtual void SetCreationOption(ElementCreationOptions value) = 0;

        /// \brief 获取要创建的Element的参数及参数值
        /// \return 返回创建Element时使用的参数及参数值values
        virtual const std::map<UniIdentity, OwnerPtr<IParameterValueStorage>>& GetParameters() const = 0;

        /// \brief 设置要创建的Element的参数及参数值
        /// \param value 要创建的Element的参数及参数值
        virtual void SetParameters(const std::map<UniIdentity, OwnerPtr<IParameterValueStorage>>& value) = 0;

        /// \brief 为要创建的Element增加参数
        /// \param paramDefId 增加的参数定义的Id
        /// \param opValue 增加的参数的值
        virtual void AddParameter(const UniIdentity& paramDefId, OwnerPtr<IParameterValueStorage>& opValue) = 0;
    };
}





